package com.yuanchu.order.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.yuanchu.common.validator.ValidationGroups;
import com.yuanchu.order.dto.GoodsSkuDto;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.io.Serializable;

/**
 * 商品记录表
 * 
 * @author adan
 * @email 2028038953@gmail.com
 * @date 2023-12-19 02:17:43
 */
@Data
@TableName("yoshop_goods")
public class YoshopGoodsEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 商品ID
	 */
	@NotNull(groups = {ValidationGroups.Update.class, ValidationGroups.Delete.class}, message = "修改必须指定商品id")
	@Null(groups = {ValidationGroups.Insert.class}, message = "新增不能指定id")
	@TableId
	@JsonProperty("goods_id")
	private Integer goodsId;
	/**
	 * 商品名称
	 */
	@NotBlank(groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class}, message = "商品名必须提交")    //不能是null和""和"  "
	@JsonProperty("goods_name")
	private String goodsName;
	/**
	 * 商品编码
	 */
	@NotBlank(groups = {ValidationGroups.Insert.class}, message = "商品编码必须提交")
	@JsonProperty("goods_no")
	private String goodsNo;
	/**
	 * 主图视频ID
	 */
	@JsonProperty("video_id")
	private Integer videoId;
	/**
	 * 主图视频ID
	 */
	@JsonProperty("video_cover_id")
	private Integer videoCoverId;
	/**
	 * 商品卖点
	 */
	@JsonProperty("selling_point")
	private String sellingPoint;
	/**
	 * 商品规格(10单规格 20多规格)
	 */
	@JsonProperty("spec_type")
	private Integer specType;
	/**
	 * 商品价格(最低)
	 */
	@JsonProperty("goods_price_min")
	private String goodsPriceMin;
	/**
	 * 商品价格(最高)
	 */
	@JsonProperty("goods_price_max")
	private String goodsPriceMax;
	/**
	 * 划线价格(最低)
	 */
	@JsonProperty("line_price_min")
	private String linePriceMin;
	/**
	 * 划线价格(最高)
	 */
	@JsonProperty("line_price_max")
	private String linePriceMax;
	/**
	 * 库存总量(包含所有sku)
	 */
	@JsonProperty("stock_total")
	private Integer stockTotal;
	/**
	 * 库存计算方式(10下单减库存 20付款减库存)
	 */
	@JsonProperty("deduct_stock_type")
	private Integer deductStockType;
	/**
	 * 商品详情
	 */
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private String content;
	/**
	 * 初始销量
	 */
	@JsonProperty("sales_initial")
	private Integer salesInitial;
	/**
	 * 实际销量
	 */
	@JsonProperty("sales_actual")
	private Integer salesActual;
	/**
	 * 配送模板ID
	 */
	@JsonProperty("delivery_id")
	private Integer deliveryId;
	/**
	 * 是否开启积分赠送(1开启 0关闭)
	 */
	@JsonProperty("is_points_gift")
	private Integer isPointsGift;
	/**
	 * 是否允许使用积分抵扣(1允许 0不允许)
	 */
	@JsonProperty("is_points_discount")
	private Integer isPointsDiscount;
	/**
	 * 积分抵扣设置(0默认抵扣 1单独设置抵扣)
	 */
	@JsonProperty("is_alone_points_discount")
	private Integer isAlonePointsDiscount;
	/**
	 * 单独设置积分抵扣的配置
	 */
	@JsonProperty("points_discount_config")
	private String pointsDiscountConfig;
	/**
	 * 是否开启会员折扣(1开启 0关闭)
	 */
	@JsonProperty("is_enable_grade")
	private Integer isEnableGrade;
	/**
	 * 会员折扣设置(0默认等级折扣 1单独设置折扣)
	 */
	@JsonProperty("is_alone_grade")
	private Integer isAloneGrade;
	/**
	 * 单独设置折扣的配置
	 */

	@JsonProperty("alone_grade_equity")
	private Object aloneGradeEquity;
	/**
	 * 商品状态(10上架 20下架)
	 */
	private Integer status;
	/**
	 * 排序(数字越小越靠前)
	 */
	private Integer sort;
	/**
	 * 是否删除
	 */
	@JsonProperty("is_delete")
	private Integer isDelete;
	/**
	 * 商城ID
	 */
	@JsonProperty("store_id")
	private Integer storeId;

	/**
	 * 商品主图
	 */
	@JsonProperty("goods_image")
	private String goodsImage;
	/**
	 * 创建时间
	 */
	@JsonProperty("create_time")
	private String createTime;
	/**
	 * 更新时间
	 */
	@JsonProperty("update_time")
	private String updateTime;

	@TableField(exist = false)
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private GoodsSkuDto skuInfo;

	// 会员折扣价格
	@JsonProperty("grade_goods_price")
	@TableField(exist = false)
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private String gradeGoodsPrice;

	// 会员折扣比例
	@JsonProperty("grade_ratio")
	private Double gradeRatio;

	// 合计金额折扣价格
	@JsonProperty("grade_total_money")
	private String gradeTotalMoney;

	// 商品总数量
	@JsonProperty("total_num")
	private Integer totalNum;

	// 商品支付总价
	@JsonProperty("total_pay_price")
	private String totalPayPrice;

	// 商品总价格
	@JsonProperty("total_price")
	private String totalPrice;

	// 商品总价格
	@JsonProperty("goods_price")
	private String goodsPrice;
	// 积分抵扣数量
	@JsonProperty("pointsNum")
	private Integer pointsNum;
	// 积分抵扣最大数量
	@JsonProperty("max_points_num")
	private String maxPointsNum;
	// 积分奖励
	@JsonProperty("points_bonus")
	private String pointsBonus;
	// 积分抵扣金额
	@JsonProperty("points_money")
	private String pointsMoney;

	@JsonProperty("is_user_grade")
	private boolean isUserGrade;

	@JsonProperty("coupon_money")
	private Integer couponMoney = 0;

	@JsonProperty("goods_sales")
	private Integer goodsSales;

	@JsonProperty("goods_sku_id")
	private String goodsSkuId;

	private String expressPrice;

	// 是否在包邮区域内
	private boolean isIntraRegion;

	public boolean getIsIntraRegion() {
		return isIntraRegion;
	}

	public void setIsIntraRegion(boolean isIntraRegion) {
		this.isIntraRegion = isIntraRegion;
	}

	public boolean getIsUserGrade() {
		return isUserGrade;
	}

	public void setIsUserGrade(boolean isUserGrade) {
		this.isUserGrade = isUserGrade;
	}
}
